package lambda05;

import org.junit.Test;

import java.util.Arrays;
import java.util.function.Function;

/**
 Java中已经定义好的函数式接口
 *  Function接口: 适用于既传递参数又要获取执行结果的操作
 *
 * @FunctionalInterface
 *  public interface Function<T, R> {
 *
 *     R apply(T t);
 *  }
 */
public class FunctionDemo {
    @Test
    public void test01(){
        //将一个整数字符串转换成一个整数返回
        Function<String, Integer> f = str -> Integer.parseInt(str);//Function<String, Integer> f = new FunctionDemo$$Lambda01();
        System.out.println(f.apply("1234"));
        System.out.println(f.apply("1234") + 12);
    }

    @Test
    public void test02(){
        //获取一个整型数组中的最大元素
        Function<int[],Integer> f = arr->{
            Arrays.sort(arr);//对数组进行从小到大排序
            return arr[arr.length - 1];
        };//Function<int[],Integer> f = new FunctionDemo$$Lambda02();

        Integer max = f.apply(new int[]{13, 23, 19, 1, 21});
        System.out.println(max);
    }
}
/**
 class FunctionDemo$$Lambda01 implements Function<String,Integer>{
    public Integer apply(String t){
        return Integer.parseInt(t);
    }
 }


 class FunctionDemo$$Lambda02 implements Function<int[],Integer>{
    public Integer apply(int[] t){
        Arrays.sort(t);//对数组进行从小到大排序
        return arr[t.length - 1];
     }
 }
 */